{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "1a11b1b2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500   NaN        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500   NaN        S  "
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import os\n",
    "import time\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "os.chdir('C:/Users/yancong/Desktop/泰坦尼克号/')\n",
    "titanic = pd.read_csv('train.csv')\n",
    "test_data = pd.read_csv('test.csv')\n",
    "titanic.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "35bd4f6f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>714.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>446.000000</td>\n",
       "      <td>0.383838</td>\n",
       "      <td>2.308642</td>\n",
       "      <td>29.699118</td>\n",
       "      <td>0.523008</td>\n",
       "      <td>0.381594</td>\n",
       "      <td>32.204208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>257.353842</td>\n",
       "      <td>0.486592</td>\n",
       "      <td>0.836071</td>\n",
       "      <td>14.526497</td>\n",
       "      <td>1.102743</td>\n",
       "      <td>0.806057</td>\n",
       "      <td>49.693429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.420000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>223.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>20.125000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>7.910400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>446.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>28.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14.454200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>668.500000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>38.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>31.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>512.329200</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       PassengerId    Survived      Pclass         Age       SibSp  \\\n",
       "count   891.000000  891.000000  891.000000  714.000000  891.000000   \n",
       "mean    446.000000    0.383838    2.308642   29.699118    0.523008   \n",
       "std     257.353842    0.486592    0.836071   14.526497    1.102743   \n",
       "min       1.000000    0.000000    1.000000    0.420000    0.000000   \n",
       "25%     223.500000    0.000000    2.000000   20.125000    0.000000   \n",
       "50%     446.000000    0.000000    3.000000   28.000000    0.000000   \n",
       "75%     668.500000    1.000000    3.000000   38.000000    1.000000   \n",
       "max     891.000000    1.000000    3.000000   80.000000    8.000000   \n",
       "\n",
       "            Parch        Fare  \n",
       "count  891.000000  891.000000  \n",
       "mean     0.381594   32.204208  \n",
       "std      0.806057   49.693429  \n",
       "min      0.000000    0.000000  \n",
       "25%      0.000000    7.910400  \n",
       "50%      0.000000   14.454200  \n",
       "75%      0.000000   31.000000  \n",
       "max      6.000000  512.329200  "
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "titanic.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "58ced94a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>446.000000</td>\n",
       "      <td>0.383838</td>\n",
       "      <td>2.308642</td>\n",
       "      <td>29.361582</td>\n",
       "      <td>0.523008</td>\n",
       "      <td>0.381594</td>\n",
       "      <td>32.204208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>257.353842</td>\n",
       "      <td>0.486592</td>\n",
       "      <td>0.836071</td>\n",
       "      <td>13.019697</td>\n",
       "      <td>1.102743</td>\n",
       "      <td>0.806057</td>\n",
       "      <td>49.693429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.420000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>223.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>22.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>7.910400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>446.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>28.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14.454200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>668.500000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>35.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>31.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>512.329200</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       PassengerId    Survived      Pclass         Age       SibSp  \\\n",
       "count   891.000000  891.000000  891.000000  891.000000  891.000000   \n",
       "mean    446.000000    0.383838    2.308642   29.361582    0.523008   \n",
       "std     257.353842    0.486592    0.836071   13.019697    1.102743   \n",
       "min       1.000000    0.000000    1.000000    0.420000    0.000000   \n",
       "25%     223.500000    0.000000    2.000000   22.000000    0.000000   \n",
       "50%     446.000000    0.000000    3.000000   28.000000    0.000000   \n",
       "75%     668.500000    1.000000    3.000000   35.000000    1.000000   \n",
       "max     891.000000    1.000000    3.000000   80.000000    8.000000   \n",
       "\n",
       "            Parch        Fare  \n",
       "count  891.000000  891.000000  \n",
       "mean     0.381594   32.204208  \n",
       "std      0.806057   49.693429  \n",
       "min      0.000000    0.000000  \n",
       "25%      0.000000    7.910400  \n",
       "50%      0.000000   14.454200  \n",
       "75%      0.000000   31.000000  \n",
       "max      6.000000  512.329200  "
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "titanic[\"Age\"] = titanic[\"Age\"].fillna(titanic[\"Age\"].median())\n",
    "titanic.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "0d9cb193",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:ylabel='Survived'>"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 查看存活比例\n",
    "# 存活只有两个数据值，1和0，可以直接用饼状图来体现，简单直观。\n",
    "sns.set()\n",
    "sns.set_style('ticks')\n",
    "plt.axis('equal')\n",
    "survive_per = titanic['Survived'].value_counts()\n",
    "survive_per.plot.pie(autopct = '%.2f%%')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "64e0e1f3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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ZGSkevToob59+1ZJLV26dNG2bds0YMAA+Xw+DR8+XG3atLHMt2rVSmPGjNHw4cNVVlamjh07Bn0Y4f79+5WQkBBSPbfddpu++eYbDRo0SFFRUWrZsqXuuecey3yzZs3Uo0cP9evXT16vV3feeaduvvlm289Rp04dPfvss3rggQdUUlKipKQkv+conIvly5fryJEjev311/X6669Lkm6//XY9+OCDpvnrr79e99xzj4YOHarIyEjdcsstlbpkH0yzZs10zz33aNiwYfJ4POrRo4eSk5Mt85dddpmefvpp3XvvvSopKdGNN95o+/YWBw4cCLm3v/jFL/Tggw8qNTVVkZGRuvLKK/X0009b5hs2bKj7779fQ4YMkcfjUXJyslJSUiRZH0NWfa3sMWeW79Onj2lvCwoKTPdt1deqqOX0/s36apU36+sLL7xgmm3evLlpX632bdVXq7xVX63WukaNGpn2tbJro1n++PHjlsdsYHb8+PFq1KiRaV+ropYJEyaoYcOGpn01yw8YMEANGjSo0Nd69eqZ1pKZmWnaV7N9jxs3TvHx8aZ9Ncv369dPJSUlpn01wzpsvg5Xdg2Wzt86bHX+YNXXypxvmGW3b99u2Vez/C233GLZ18qe+5jlb731Vsu+mtVi1VerWqyOV6u8VV/N8jfffLNlX83O84YNG6ZrrrmmQl9dLlelzgnN9u31ei37apYfOXKk6tSpY9rXypyjWu3b7Xab9tQsP378eLVo0cLyeA08/w227lXmfLmyebPz6wceeEAdO3as1DrsMgzDCLlCAAAAAECN54jn6AEAAAAAfsKgBwAAAAAOw6AHAAAAAA7DoAcAAAAADsOgBwAAAAAOw6AHAEAVe/nll/XOO+/YZgoKCpSamlo9BQEAah3eXgEAgPPgwIEDSklJ0datW893KQAAB2LQAwDUGj6fT9OnT9e2bdt08uRJGYahP/7xj7r66qv16KOPat++fWrQoIHi4uJ03XXX6YEHHtDu3bs1bdo0HT9+XF6vVyNHjtTgwYNtP8/kyZN13XXX6e6771bLli11zz33aMOGDcrJySl/E9+RI0dqy5Ytuv7667VixQpFRkZW03cBAFAbuM93AQAAVJdt27YpJydHS5YsUUREhObPn68FCxYoJiZG1157rV577TXl5ORo0KBBuu666+TxeDRx4kTNnDlTzZs3V0FBgYYMGaJrr71WrVu3DulzlpaWqmHDhnrrrbe0fft2DRs2THfccYdmzJihlJQUrVq1KrxfNACgVmLQAwDUGm3atNEll1yit956S/v379fmzZt10UUX6YsvvtDKlSslSfHx8erVq5ckae/evdq3b58ee+yx8n0UFxfrm2++CXnQk6SuXbtKkpo3b67S0lKdOnWq6r4oAABMMOgBAGqNTz75RNOmTdNdd92lrl276pprrtG7774rt9utM5/JEBHx42uVeb1eXXzxxX5X3Y4cOaKLL764Up+3Tp06kiSXyyVJ4lkTAIBw41U3AQC1xoYNG9SlSxcNHz5cLVq00EcffSSv16ukpCQtX75cknTs2DF99NFHcrlcuvrqq1W3bt3yQe/w4cNKTk7W9u3bz7kWt9str9fL0AcACAsGPQBArTF06FB9/vnnSklJ0cCBA9W0aVMdOHBAjz76qPbs2aOUlBRNnDhRl19+uerWravo6Gj9+c9/1vLly5WSkqLRo0frwQcf1M0333zOtcTFxSkxMVF9+/bVsWPHquCrAwDgJ7zqJgCg1ktPT9dNN92kNm3aqLS0VMOHD9cDDzygpKSk810aAABnhefoAQBqvWuvvVbPPPOMfD6fysrK1KtXL9shb8+ePUpLSzO97eqrr9ZLL70UpkoBAAgNV/QAAAAAwGF4jh4AAAAAOAyDHgAAAAA4DIMeAAAAADgMgx4AAAAAOAyDHgAAAAA4DIMeAAAAADjM/wMsj6ezG/aiDAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 1080x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3oAAAEJCAYAAADCelU+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA2bUlEQVR4nO3deXhU9fn38c8kkwARI1ATokhd6oICAaqVTciD7JCwSctWgiKIIqJpHxEVpWoBpSrKUhV+VGkNlUUQQQ2o1F8VKIqlRBRUoMiaBQIkgWwzc54/fIjM5JwzE8iEcPJ+XRfXxcl85uRO7pxvzp0zi8swDEMAAAAAAMeION8FAAAAAACqFoMeAAAAADgMgx4AAAAAOAyDHgAAAAA4DIMeAAAAADiM+3wXcDaKi4u1fft2xcXFKTIy8nyXAwAAAADVyuv1Kjc3Vy1atFDdunUr3H5BDnrbt2/XiBEjzncZAAAAAHBepaen65Zbbqnw8Qty0IuLi5P04xeVkJBwnqsBAAAAgOqVlZWlESNGlM9GgS7IQe/0wzUTEhJ0xRVXnOdqAAAAAOD8sHoqGy/GAgAAAAAOw6AHAAAAAA7DoAcAAAAADsOgBwAAAAAOE9ZBr7CwUMnJyTpw4ECF23bs2KFBgwapZ8+eevzxx+XxeMJZCgAAAADUGmEb9LZt26Zhw4Zp7969prc//PDDevLJJ7V27VoZhqGlS5eGqxQAAAAAqFXCNugtXbpUU6dOVXx8fIXbDh48qOLiYrVu3VqSNGjQIGVkZJjuJz8/XwcOHPD7l5WVFa6yAQAAAOCCF7b30Zs2bZrlbTk5OX5v7BcXF6fs7GzT7KJFizR37lzT2wzDCKkWwzDkcrlCytZUoX4NTvhaw81nGIoI8j06M+PzGYqICJIPIQMAAH7kKfXIHW1/GhpKBjVLWXGZoupGnXOmtistLlV03eigubKSMtvbz8vR4/P5/IYRu+Fk1KhRGjhwoN/HTr8LvMvlUlFZ8Of21Yu68BcJl8ul3PxTQXNxsTHVUM2FLcLl0jf7cm0zN/38pz9ERES49NV/c2zzLa+ueOUaAACYc0e79XTybNvMk2smVlM1qCpRdaM08Yr7bTOzD8yrpmouXNF1o9W7fs+guQU7F9refl4moISEBOXm/nSifeTIEdOHeEpSbGysYmNjq6s0AAAAALjgnZe3V2jSpInq1KmjL7/8UpK0atUqde7c+XyUAgAAAACOU62D3tixY/XVV19Jkp5//nnNmDFDvXr10qlTp5SamlqdpQAAAACAY4X9oZvr168v//+CBQvK/9+sWTMtX7483J8eAAAAAGqd8/LQTQAAAABA+DDoAQAAAIDDMOgBAAAAgMMw6AEAAACAwzDoAQAAAIDDMOgBAAAAgMMw6AEAAACAwzDoAQAAAIDDMOgBAAAAgMMw6AEAAACAwzDoAQAAAIDDMOgBAAAAgMMw6AEAAACAwzDoAQAAAIDDMOgBAAAAgMMw6AEAAACAwzDoAQAAAIDDMOgBAAAAgMMw6AEAAACAwzDoAQAAAIDDMOgBAAAAgMMw6AEAAACAwzDoAQAAAIDDMOgBAAAAgMMw6AEAAACAwzDoAQAAAIDDMOgBAAAAgMMw6AEAAACAwzDoAQAAAIDDMOhVIcMwqiQDAAAAAOfCfb4LcBKXy6VjJ0tsMw0vqlNN1QAAAACorbiiBwAAAAAOE9ZBb/Xq1erTp4969Oih9PT0Crd//fXXuuOOO9SvXz+NGzdO+fn54SwHAAAAAGqFsA162dnZmjVrlhYvXqx33nlHS5Ys0a5du/wy06ZN08SJE/Xuu+/q6quv1sKFC8NVDgAAAADUGmEb9DZu3Kh27dqpQYMGiomJUc+ePZWRkeGX8fl8OnnypCSpqKhIdevWDVc5AAAAAFBrhO3FWHJychQXF1e+HR8fr8zMTL/M5MmTNXr0aE2fPl316tXT0qVLK+wnPz+/wkM6s7KywlM0AAAAADhA2AY9n88nl8tVvm0Yht92cXGxHn/8cb3xxhtKTEzU66+/rkceeUTz58/328+iRYs0d+7ccJUJnFc+n6GICFeV5QAAAAApjINeQkKCtmzZUr6dm5ur+Pj48u3vvvtOderUUWJioiRpyJAhevnllyvsZ9SoURo4cKDfx7KysjRixIgwVQ5Un4gIl7Z8dyho7pbrL6+GagAAAOAUYXuOXocOHbRp0ybl5eWpqKhI69atU+fOnctvv/LKK5WVlaU9e/ZIkj7++GO1bNmywn5iY2N1xRVX+P1LSEgIV9kAAAAAcMEL2xW9xo0bKy0tTampqSorK9PgwYOVmJiosWPHauLEiWrZsqVmzJihhx56SIZh6Gc/+5mmT58ernIAAAAAoNYI26AnSSkpKUpJSfH72IIFC8r/n5SUpKSkpHCWAAAAAAC1TljfMB0AAAAAUP0Y9AAAAADAYRj0AAAAAMBhGPQAAAAAwGEY9AAAAADAYRj0AAAAAMBhGPQAAAAAwGEY9AAAAADAYRj0AAAAAMBhGPQAAAAAwGEY9AAAAADAYRj0AAAAAMBhatWgZxhGlWQAAAAAoCZzn+8CqpPL5VJhSZltpn6dqGqqBgAAAADCo1Zd0QMAAACA2oBB7zwJ9SGiPJQUAAAAQGXVqodu1iQul0tHC4uD5n5Wv241VAMAAADASbiiBwAAAAAOw6AHAAAAAA7DoAcAAAAADsOgBwAAAAAOw6AHAAAAAA7DoOdQobwtA2/dAABAzeEp81Qq5ykNng8lA8CZeHsFh3K5XMo+ftI207jBRdVUDQAACMYd5dZzd78eNPfIwrt+zEe79eyohbbZyYvurpLaAFx4uKIHAAAAAA7DoAcAAAAADsOgBwAAAAAOw6AHAAAAAA7DoAcAAAAADsOgBwAAAAAOw6AHAAAAAA5j+z56t99+u1wul+XtH3/8cZUXBAAAAAA4N7aD3uzZsyVJixcvVlRUlIYMGaLIyEitWLFCZWVlQXe+evVqvfLKK/J4PBo1apRGjBjhd/uePXs0depUnThxQnFxcXrxxRd1ySWXnMOXAwAAAACwfehmixYt1KJFC33//fd66qmndNNNN+mGG27Qo48+qszMTNsdZ2dna9asWVq8eLHeeecdLVmyRLt27Sq/3TAM3XfffRo7dqzeffdd3XjjjZo/f37VfFUAAAAAUIuF9By9/Px85eXllW9nZ2ersLDQ9j4bN25Uu3bt1KBBA8XExKhnz57KyMgov/3rr79WTEyMOnfuLEm69957K1zxAwBU5PX6qiSDyvF4vFWSAQCgOtg+dPO0UaNGKSUlRbfddpsMw9CGDRv08MMP294nJydHcXFx5dvx8fF+VwH37dunSy+9VI899ph27Niha665Rk888USF/eTn5ys/P9/vY1lZWaGUDQCOFBkZofS122wzI3q2qqZqag+3O1JzF/zDNjNhbJdqqgYAAHshDXrDhw/XL3/5S23atEmSNGbMGF1//fW29/H5fH4v5GIYht+2x+PR559/rjfffFMtW7bUSy+9pGeffVbPPvus334WLVqkuXPnhvwFAQAAADVFWUmZoupEnXMGqKyQBj1J2rt3r44fP65x48Zp/fr1QQe9hIQEbdmypXw7NzdX8fHx5dtxcXG68sor1bJlS0lScnKyJk6cWGE/o0aN0sCBA/0+lpWVxcM8AQAAUONF1YnSYzdPtc1M//KpaqoGtUlIz9GbP3++/v73vysjI0MlJSWaO3eu5s2bZ3ufDh06aNOmTcrLy1NRUZHWrVtX/nw8SWrTpo3y8vK0c+dOSdL69evVvHnzCvuJjY3VFVdc4fcvISGhMl8jAAAAANQqIQ167733nhYsWKB69eqpYcOGWrp0qdasWWN7n8aNGystLU2pqakaMGCAkpOTlZiYqLFjx+qrr75S3bp1NW/ePE2ZMkV9+/bV5s2bNXny5Cr5ogAAAACgNgvpoZtut1vR0dHl27GxsXK7g981JSVFKSkpfh9bsGBB+f9btWql5cuXh1orAAAAACAEIQ16l112mT755BO5XC6VlpZq4cKFatKkSbhrAwAAAACchZAGvSeeeEKTJk3St99+q9atW6tVq1Z64YUXwl0bAAAAAOAshDToxcTEaNGiRSoqKpLX61X9+vXDXRcAAAAA4CyF9GIsXbt21aRJk/T1118z5AEAAABADRfSoPfxxx+rTZs2eu6559SrVy8tXLhQeXl54a4NAAAAAHAWQhr0Lr74Yg0bNkzLli3TSy+9pLVr1yopKSnctQEAAAAAzkJIz9GTpK+//lorV65URkaGWrRooZdffjmcdQEAAAAAzlJIg15KSoqKioo0aNAgvf3222rcuHG46wIAAAAAnKWQBr3JkyerY8eO4a4FAAAAAFAFbAe9BQsWaOzYsVq/fr3+8Y9/VLh9ypQpYSsMAAAAAHB2bAe9iy++WJLUsGHDaikGAAAAAHDubAe9oUOHSpIuvfRSJScn8x56AAAAAHABCOntFTZv3qxu3brpscce09atW8NdEwAAAADgHIT0YiyzZs3SiRMntGbNGk2bNk3FxcX69a9/rVGjRoW7PgAAAABAJYV0RU+SLrnkEg0ZMkTjxo1TTEyMFixYEM66AAAAAABnKaQret98843efvttZWRk6KabbtKYMWN0++23h7s2AAAAAMBZCGnQGz9+vAYPHqxly5bp8ssvD3dNuAAYhiGXy3XOGQCw4vH65I4M/sCTUHNAbecp9cgdbX/qF0rmXO53tvsPp7ISj6LqBK8p1Fx1KyspU1SdqHPOmN6vuExRdYPfL9QcqldIP60333yzJkyYEO5acAFxuVzafyTfNtP00thqqgaAE7kjIzT/7xuD5u4Z1qEaqgEufO5ot6YPn2+beWzxPWe97z8Omhc0N2XF/We1/3CKquPWE51mBM098+mj1VBN5UXVidIjzR6xzTy387mz23fdKP3u5w8Gzb247+Wz2j/CK6Q/gX7//fcyDCPctQAAAAAAqkBIV/Ti4uLUt29ftWrVShdddFH5x6dMmRK2wgCgpvD6fIqMCP53sVBzAAAA4RbSoNemTRu1adMm3LUAQI0UGRGhFf/cETQ3qPON1VANLhQej1dud+Q5ZwAAOBshDXo8Pw8AgMpxuyM199X1tpkJ9/IK1gCA8Ahp0EtJSTH9+OrVq6u0GACAs4XyCpm8iiYAAOcupEHviSeeKP9/WVmZ3nvvPTVt2jRsRQEAnMkdGaGFyzbbZu7+ddtqqgYAAOcKadC79dZb/bY7dOigoUOH6r777gtLUQCqhs9nKCLC/r0MQ8kAQFXxlHnljgr+vMRQcwAAc2f1ro/Hjh1TTk5OVdcCoIpFRLi0Yfs+20zHFj+vpmoAVJVQX8SlJr7YizsqUrOeXBk0l/b0wGqoBgCc66yeo3fo0CENGTIkLAUBAAB7bnek5ry0NmjugYd6VkM1AICaKOigZxiGJk+erKioKBUUFGjnzp3q1q2bbrjhhuqoDwAAAABQSbYva7Zr1y517dpVpaWlSkxM1PPPP681a9ZozJgx2rBhQ3XVCAAAAACoBNtBb+bMmXrooYfUpUsXvffee5Kk9957T0uXLtWcOXOqpUAAAAAAQOXYDnqHDx9Wv379JEmbN29W165dFRERocsuu0yFhYXVUiAAAAAAoHJsB72IiJ9u3rp1q371q1+Vb5eUlISvKuAC5fMZVZoDAAAAzobti7Fccskl2rlzpwoLC5Wbm1s+6P373/9W48aNq6VA4EISEeHS1l1ZQXNtrk2ohmoAAABQW9le0fvd736nO++8U3feeaceeughxcTEaOHChRo3bpwmTpwYdOerV69Wnz591KNHD6Wnp1vmPvnkE91+++2Vrx4AAAAAUIHtFb3WrVvrn//8p4qLixUbGytJatOmjZYtW6arrrrKdsfZ2dmaNWuWVqxYoejoaA0dOlRt27bVtdde65c7cuSInnvuuXP7KgAAAAAA5Wyv6ElSdHR0+ZAnSb/85S+DDnmStHHjRrVr104NGjRQTEyMevbsqYyMjAq5KVOmaMKECZb7yc/P14EDB/z+ZWUFf2gcgNrF6/NVSQYAAMAJgr5h+tnKyclRXFxc+XZ8fLwyMzP9Mn/961910003qVWrVpb7WbRokebOnRuuMgE4RGREhNZs+s42k9z++mqq5sLl9foUGRn0b4Ah56qTx+uTO4SaQs3VZh6PV2535DlnAADnT9gGPZ/PJ5fLVb5tGIbf9nfffad169bpjTfesL1CN2rUKA0cONDvY1lZWRoxYkTVFw0AtVxkZIQWvftl0NyofjdXQzWV446M0GtvfhY0N+63t1VDNRc2tztSL89YY5t58NHkaqoGAHA2wjboJSQkaMuWLeXbubm5io+PL9/OyMhQbm6u7rjjDpWVlSknJ0fDhw/X4sWL/fYTGxvr99BRAAAAAIC9sD12pUOHDtq0aZPy8vJUVFSkdevWqXPnzuW3T5w4UWvXrtWqVas0f/58xcfHVxjyAAAAAACVF7ZBr3HjxkpLS1NqaqoGDBig5ORkJSYmauzYsfrqq6/C9WkBAAAAoNYL20M3JSklJUUpKSl+H1uwYEGF3BVXXKH169eHsxQAAAAAqDV42TEAQK3k8YT2dhuh5gCEj6fUUyUZoDYJ6xU9AICzhfJWBTX17Qzc7gj9+fV/Bs2Nv6tz0AyA8HJHu/VUrxdtM1MzfldN1QAXBgY9AMBZc0dG6C8rvrDNjB70q2qqBgAAnFbz/sQK4ILg9YX2cLZQcwDCx+PxVknGiTxlIXxvQsgAQE3DFT3gAuLzGYqIcJ1zpipERkRo/db/Bs3d3ubqsNcCwJ7bHanZf3rfNjPx4T7VVE3N4o6K1PMP/d02839fGlZN1QBA1WHQAy4gEREu/WvHAdtMuxuvqKZqAAAAUFPx0E0Akn68EliVOQAAAJw/XNEDIOnHq4X/zPwhaK5z4pXVUA0AAADOBVf0IEkyjOBXaULJAKg8rzf4C9aEkgHOl5r0Yi+8uAokqSyE99QLJQNcyLiiB0mSy+XSobxC28zljepXUzVA7RIZGaHFH39lmxnetWU1VQNUntsdqZeeXmWbeejJ/tVTS1SkXvi/S2wzv39+SLXUgvMnKtqtqbfPtM08tX5SNVUDnB9c0QMAAAAAh2HQAwAAAACHYdADAAAAAIdh0ANQ63h9ob2wSag5AACAmoYXYwFQ60RGRGjVhp1Bc/07NquGagAAAKoeV/Rs8JYDAAAAAC5EXNGz4XK5lF9UapuJrRddTdUAAAAAQGi4ogcADhbqG63zhuwAADgLV/QAwMEiIyP01/e2Bs2l9m1TDdUAuFB4Sj1yRwc/TQw1B6D6cWQCAADAjzvarWm/eTVo7vGl91ZDNQDOBg/dBAAAAACHYdADAAAAAIdh0AMAAAAAh2HQA4AqFsorWPIqlwAAIJx4MRYAqGKRkRFa+snXtpnf/J/m1VQNAACojbiih7DzGUaV5s7mfme7bwAAAOBCxBU9hF2Ey6W9OSeC5q6Kv+Ss9//dwaO2meub/Oys9g0AAABciLiiBwAAAAAOw6AHAAAAAA7DoAcAAAAADsOgBwAAAAAOw6AHAAAAAA4T1kFv9erV6tOnj3r06KH09PQKt3/00Ufq37+/+vXrp/Hjx+vEieCvzAgAAAAAsBe2QS87O1uzZs3S4sWL9c4772jJkiXatWtX+e2FhYX6wx/+oPnz5+vdd9/VDTfcoDlz5oSrHAAAAACoNcI26G3cuFHt2rVTgwYNFBMTo549eyojI6P89rKyMk2dOlWNGzeWJN1www06fPhwuMoBcIHx+nxVkgEAAKiNwvaG6Tk5OYqLiyvfjo+PV2ZmZvl2w4YN1b17d0lScXGx5s+fr5EjR1bYT35+vvLz8/0+lpWVFaaqAdQUkRER+uDzXbaZ3rdeW03VAAAAXFjCNuj5fD65XK7ybcMw/LZPKygo0P33369mzZpp4MCBFW5ftGiR5s6dG64yAQBADeYp88odFVllOQCoLcI26CUkJGjLli3l27m5uYqPj/fL5OTk6O6771a7du302GOPme5n1KhRFQbArKwsjRgxouqLBgAANYo7KlIvPro8aO53MwZXQzUAcOEI26DXoUMHzZkzR3l5eapXr57WrVunZ555pvx2r9ere++9V71799b48eMt9xMbG6vY2NhwlQmgmnh9PkVG2D8tOJQMAAAAggvboNe4cWOlpaUpNTVVZWVlGjx4sBITEzV27FhNnDhRWVlZ+uabb+T1erV27VpJUosWLTRt2rRwlQTgPIqMiNCHX+62zXS/+RfVVA0AAICzhW3Qk6SUlBSlpKT4fWzBggWSpJYtW2rnzp3h/PQAAAAAUCvxGCkAAAAAcBgGPQAAAABwGAY9AADOM4/HW6U5AADC+hw9AAAQnNsdqblzPwyamzChezVUAwBwAq7oAQAAAIDDMOgBAAAAgMMw6AEAAACAwzDoAQAAAIDDMOgBAAAAgMMw6AEAAACAwzDoAQAAAIDDMOgBAAAAgMMw6AEAAACAwzDoAQAAhIGnzFulOQCoDPf5LgAAAMCJ3FGRmnnvX4PmJr2aWg3VAKhtuKIHAAAAAA7DoAcAAAAADsOgBwAAAAAOw6AHAAAAAA7DoAcAAAAADsOgBwAAAAAOw6AHAAAAAA7DoAcAAAAADsOgBwAAAAAOw6AHAAAAAA7DoAcAAAAADsOgBwAAAAAOw6AHAAAAAA7DoAcAAAAADsOgBwAAAAAOw6AHAAAAAA7DoAcAAAAADsOgBwAAAAAOE9ZBb/Xq1erTp4969Oih9PT0Crfv2LFDgwYNUs+ePfX444/L4/GEsxwAAAAAqBXCNuhlZ2dr1qxZWrx4sd555x0tWbJEu3bt8ss8/PDDevLJJ7V27VoZhqGlS5eGqxwAAAAAqDXc4drxxo0b1a5dOzVo0ECS1LNnT2VkZGjChAmSpIMHD6q4uFitW7eWJA0aNEizZ8/W8OHD/faTn5+v/Px8v48dPHhQkpSVlaVijzdoLXXdkeX/P1Vqf9UwJtr/W1JYXGabz68b5bd9oqjUNn+yXnT5/4+fKrHNSlJRTJ3y/+cVFgfNl+TXLf//kfwi22xZYT2/7ZwTp2zzvlMxfttZxwpt867in/qWdbTANitJ7tLgGSvZ2cdtb48x/L8XOVl5tvnYCP/e5GQdtc0fiPqp7znZubZZSTpQ96efw9zsnOD5GN8Z+Sz77MX+20dyguQP/PT3nmDZH/M/HU9HQ8r/dIwczc0Okq3jtx08X9dvOy9o/qef4bwj9tkf8/XL/38spPxP3/xjR+z7euDAJX7bx48Gyx846/zxvBB+xvzyIfwMn5E/ccw+H1h7ZfInjh2pXC3HK5fPr2z+hH0+8GvNPxFk7Thz3/n22XPOF9ivexVqr2y+MPR8/kn7bGC+4OSxyuVP2ecDa69svjIKio4HzfjVXlzZ/ImQs5JUWBJ6vrDUPlsxn2+TNMmX2ecr1F5mf55QIe8JPX/SG/wc5Fx+Dk767M+ZzmXfknTSOBm2/Z9y2Z8fBu6/yGV//nmuX2ttURZpP4NIP85CkuT1ms9DLsMwjCqt6v977bXXdOrUKaWlpUmSli1bpszMTD3zzDOSpK1bt2rmzJn6+9//Lkn64YcfdM8992jt2rV++5kzZ47mzp0bjhIBAAAA4IKWnp6uW265pcLHw3ZFz+fzyeVylW8bhuG3Hez200aNGqWBAwf6fay0tFT79+/XVVddpcjIn64uZGVlacSIEUpPT1dCQkLQGsOZr0m11KbaK5uvSbWEO1+Tagl3vibVUptqr2y+JtUS7nxNqiXc+ZpUS22qvbL5mlRLuPM1qZZw52tSLbWp9srmq2rfXq9Xubm5atGihen9wjboJSQkaMuWLeXbubm5io+P97s9N/enh+8cOXLE7/bTYmNjFRsbW+Hj11xzje3nvuKKKypVa7jyNamWyuZrUi3hztekWsKdr0m1hDtfk2qpbL4m1RLufE2qJdz5mlRLuPM1qZbK5mtSLeHO16Rawp2vSbWEO1+TaqlsvibVEu58Vez7yiuvtMyH7cVYOnTooE2bNikvL09FRUVat26dOnfuXH57kyZNVKdOHX355ZeSpFWrVvndDgAAAAA4O2Eb9Bo3bqy0tDSlpqZqwIABSk5OVmJiosaOHauvvvpKkvT8889rxowZ6tWrl06dOqXU1NRwlQMAAAAAtUbYHropSSkpKUpJSfH72IIFC8r/36xZMy1fvjycJQAAAABArRPWN0yvbrGxsZowYYLpc/qqO1+TaqlsvibVEu58Taol3PmaVEu48zWplsrma1It4c7XpFrCna9JtYQ7X5NqqWy+JtUS7nxNqiXc+ZpUS7jzNamWyuZrUi3hzoe7ltPC9vYKAAAAAIDzw1FX9AAAAAAADHoAAAAA4DhhfTGW6rR69Wq98sor8ng8GjVqlEaMGBH0PoWFhRo6dKheffXVoO9hMXfuXH3wwQeSpKSkJE2aNMk2//LLL2vt2rVyuVwaPHiw7rrrrqD1PPfcczp27JieffZZ29zIkSOVl5cnt/vH9j399NNq1aqVZX79+vWaO3euioqK1LFjR02ZMsUyu2zZMr355pvl2wcOHFD//v315JNPWt5n1apVmj9/viSpc+fOeuSRR2zrnz9/vt5++21FR0erT58+uu+++ypkAnuzceNGzZgxQyUlJerdu7fS0tJs85I0adIktWvXToMGDbLNLlmyRH/729/kcrnUokULPfXUU4qOjrbML168WOnp6TIMo/xnweVy2dYiSW+++abWrl2rv/3tb7b1PProo/ryyy9Vr149SdKECRPUvXt3y/zWrVs1Y8YMnTx5UjfccIOeffbZ8vrPzO7evVsvvvhi+X6ys7PVqlUrvfbaa5b7/uyzzzRz5kz5fD7ddNNN+uMf/2j7vVmxYoX+53/+R5GRkWrbtq0mT55c/nNqdgzZ9dXqmCsrK9OYMWM0fvx4tW3b1jZv1VuzrF1f7Y5/s76a5e36apa36mtgtm3btrZ9Ndu3XV/N8nZ9NVvr7PpqtTZa9dUsb9VXs6xdX+3WabO+muXt+mqWt+prYPaaa66x7avZvu36apa36+tpZ/5eCrYOB/4Os+qpWT7YOhyYD7YOm9Vj1VezfLB1+Mys3RocmO/du3fQdThw/8HW4cC8XV/Nzh9Onjxp2Ver8w2z3ppld+7cadlXs/zXX39t2Ve7cx+zvprl33rrLdO+mmV9Pp9lXwPz3bt314cffmjZV7P9FxQUWPbVLL97927Lvpqd51kdr1bnhFbHq1ne7ng1y9sdr3bnqIF9NcvaHatmeavj1er8t1u3bqbfR7vzZbPvZbDza7OfYbPz62DrcAWGA2RlZRldunQxjh07Zpw8edJISUkxvv/+e9v7/Oc//zGSk5ON5s2bG/v377fNbtiwwRgyZIhRUlJilJaWGqmpqca6dess85s3bzaGDh1qlJWVGUVFRUaXLl2M3bt3236OjRs3Gm3btjUeeeQR25zP5zNuu+02o6yszDZ32r59+4zbbrvNOHz4sFFaWmoMGzbM+OSTT0K673fffWd0797dOHr0qGXm1KlTxq9+9Svj6NGjRllZmTF48GBjw4YNlvkNGzYYycnJRkFBgeHxeIxx48YZa9eu9csE9qaoqMhISkoy9u3bZ5SVlRmjR4/2+xoC81lZWca4ceOMxMRE4+2337bd9549e4zu3bsbBQUFhs/nMyZNmmS8/vrrlvl9+/YZ3bt3N06ePGl4PB5jyJAhxqeffmqZP+377783OnXqZPz2t7+1rccwDCM5OdnIzs42/f4F5gsKCoyOHTsaO3bsMAzDMNLS0oz09HTbWgzDMHJycoyuXbsa//3vf21r6dy5s7Fr1y7DMAzjgQceMJYuXWqZ3717t9GpU6fy2qdOnWr85S9/Ke974DG0evVqy75aHXO7d+82hgwZYrRs2dL417/+VV6LWf61114z7a1Z9vXXX7fsq93xb9ZXq7xVX83yK1asMO1rsLUosK9Weau+Wn0frfpqttbt2LHDsq9Wa6NVX63yZn21y5r11W6dNuurVd6qr1bfG7O+BvudEdhXq7xVX63yVn097czfS8HW4cDfYVY9NcsHW4cD88HWYbN6rPpqlbdbh8/M2q3BdrUYhvk6bJa3W4cD83Z9NTt/sOur1fmGWW/NsnZ9Ncvb9dXu3Mesr1Z5s76aZe36Guw8LLCvVnmrvprl7fpqdZ5n1lerrNXxapZ/4403LPtqlk9PT7fsq905amBfrbJWx6pZ/sMPPwx6vBrGT+e/hw4dsl33AvNHjx4NuvYF5s2+VsMwP7/++OOPQ6rnTI546ObGjRvVrl07NWjQQDExMerZs6cyMjJs77N06VJNnTpV8fHxQfcfFxenyZMnKzo6WlFRUfrFL36hQ4cOWeZvvfVW/fWvf5Xb7dbRo0fl9XoVExNjmT9+/LhmzZqle++9N2gte/bskSSNHj1a/fr18/vrgJkPP/xQffr0UUJCgqKiojRr1izbq39n+sMf/qC0tDQ1atTIMuP1euXz+VRUVCSPxyOPx6M6depY5r/55hvddtttql+/viIjI9WpUyd99NFHfpnA3mRmZurKK69U06ZN5Xa7lZKS4tffwPzq1avVtWtX9e7du8LnD8xGR0dr6tSpql+/vlwul66//nq/3gbmmzZtqvfee08xMTHKz89XYWGh3ysgmf1clZaW6sknn9TEiROD1lNUVKRDhw7pscceU0pKimbPni2fz2eZ37Bhg1q3bq1mzZpJkqZMmVL+lyy7n/GZM2dq6NChuuqqq2xr93q9KiwslNfrVUlJiV9vA/PffvutWrduXb7dpUuX8t6aHUN79+617KvVMbd8+XKNGTOmws+wWb60tNS0t2ZZl8tl2VerWqz6apW36qtZ/uDBg6Z9DbYWBfbVKm/VV6vvo1Vfzda6/Px8y75arY1WfTXL16lTx7SvVvu26qtV3qqvZvm6deta9tUsv2PHDtO+BvudEdhXq7xVX83ymZmZln2VKv5esluHzX6HWfXULB9sHQ7MB1uHzeqxW4cD83brcGDWbg22qsWqr1Z5u3U4MG+3DpudP9j11ep8w6y3Zlm7vprl7fpqVYtVX83yVn01y9r1Ndh5WGBfrfJWfTXL2/XV7DyvXr16pn21Oie0Ol7N8t26dbPsq1m+T58+ln21qsesr2bZZs2aWR6rZnmv12t7vJ52+vx3//79tuefgflGjRrZrn1meaufYbPz6/r164dUz5kcMejl5OQoLi6ufDs+Pl7Z2dm295k2bZpuueWWkPZ/3XXXqXXr1pKkvXv36oMPPlBSUpLtfaKiojR79mz17dtX7du3V+PGjS2zTz75pNLS0kJ6ydT8/Hy1b99e8+bN0xtvvKG33npLGzZssMz/8MMP8nq9uvfee9W/f38tXrxYl1xySdDPs3HjRhUXF5sOS2eqX7++HnzwQfXu3VtJSUlq0qSJfvnLX1rmmzdvrs8++0zHjx9XSUmJ1q9fryNHjvhlAnsTrL+B+TFjxujXv/616ecPzDZp0kQdO3aUJOXl5Sk9PV1du3a1zEs/9nbp0qXq1q2b4uLiyhcMq/wLL7ygO+64Q02bNg1az5EjR9SuXTtNnz5dS5cu1ZYtW/zeazIw/8MPPygmJkZpaWnq37+/5syZU/5zZPUzvnfvXn3++edKTU21rUX6cTEaOXKkOnXqpGPHjqlXr16W+WbNmmnbtm06fPiwvF6vMjIyyntrdgy5XC7Lvlodc5MmTVK3bt0qfE1m+eTkZNPeWu3bqq9Weau+muU7depk2VezfHR0tGlf7dYis75a5a36apbv06ePZV+limtdsOPVbG206qtZ/vLLL7c8Zs32bXe8muXtjtfAvMfjsT1eA/O5ubmWx6vV7wyr49Usb3e8BuYTExNt+xr4e8mur2a/w+x6GpgPtg6b7d+ur2Z5u74G5u3W4cCs3RpsVYtk3VezvF1fA/N267DZ+cPpP36ddmZfrc43zHprlt27d69lX632bdVXq7xVX83yq1atMu2rWdaur3bnYWZ9tcpb9dUsf+LECcu+mp3nWR2vVueEVserWd5uDbbav1VfrfJmfTXLlpSUWB6rZvlgx6vkf/4bynwReL5st/aZ5a1+hs3Or89m3nHEoOfz+fwem28YRoXH6leF77//XqNHj9akSZP8/gJnZeLEidq0aZMOHz6spUuXmmaWLVumyy67TO3btw+phjZt2mjmzJm6+OKL1ahRIw0ePFj/+7//a5n3er3atGmTpk+friVLligzM1MrV64M+nneeuutkJ5XuHPnTr399tv6xz/+oU8//VQRERFauHChZb59+/YaNGiQRo4cqTFjxujmm29WVFSU7eeojv5mZ2dr1KhRuuOOO0yfSxLoN7/5jTZv3qxLL71Uc+fOtcxt2LBBhw8f1h133BFSHU2bNtW8efMUHx+vevXqaeTIkUH7+9lnn+l3v/udVqxYoaKiovLHc1tZsmSJhg8fXuE5HoFyc3P1/PPPa82aNfrss8/UqlUrzZgxwzJ/9dVX6/e//73uu+8+jRgxQjfccEOF3p55DDVt2jRoXyt7zJnlrXprlrXr65n5gwcPBu3rmflrrrkmaF/PzAfrq1ntdn09M3/RRRcF7Wtg7cH6euZat3fv3qB9DWVtDJa36qtZ1q6vZ+aXLFkStK9n5jdt2hS0r2fmS0tLbftqVrtdX8/Mz5s3L2hfz8x/8cUXln01+71ktQ5X9neYXd6sp3Z5s76a5e3WYbO81TpslrU7Vu1qN+urWd5uHTbL263DZucPs2fPtjxeK3O+YZc166td3qyvZvk//elPln01y+/Zs8e0r2bZF154wbKvdrWb9dUsv2bNGsu+WtVu1Vez87z9+/eb9rWy54R2ebO+2uXN+mqWX7ZsmWlfzbJbtmyxXIPN8qGcM515/hvK+Weo58tmebu1yez8OpTfr4EcMeglJCQoNze3fDs3Nzekh2RWxpdffqk777xTv//97zVw4EDb7O7du7Vjxw5JUr169dSjRw99++23ptn3339fGzZsUP/+/TV79mytX79e06dPt9z3li1btGnTpvJtwzAqPHn+TJdeeqnat2+vRo0aqW7duurWrZsyMzNt6y8tLdUXX3yh22+/3TYnSZ999pnat2+vn/3sZ4qOjtagQYP0+eefW+YLCwvVo0cPrV69Wn/7298UHR1t+hfWM4W7v7t379bQoUM1cOBA3X///bbZw4cP68svv5Qkud1u9e3b17K3krRmzRp9//336t+/v6ZMmaLt27froYcessx/++23Wrt2bfl2KP1t1aqVmjZtqsjISPXu3Ttofz/++GP16dPHNiP9+LN2/fXX6+c//7kiIiL0m9/8xra3JSUlSkxM1DvvvKO33npLjRs39utt4DEUrK+VOeas8la9DcwG62tgPlhfA/PB+hqYt+ur1ffFqq+B+WB9Dczb9dVsrdu8ebNlXyuzNtrlzfpqlt22bZtlX63yVn01y7///vuWfTXLz58/37Svdt8Xs76a5T/44APLvprlMzMzLftq9ntp2bJlpn2t7O8wq7zVsWqWP/3iC2Z9NcvbHa9m+fvvv9+0r2bZv/zlL5bHqt33xqyvZvkhQ4ZY9tVq/1Z9NTt/aNKkieXxWpnzDausVV/N8gUFBZZ9NcvfeOONln01yx88eNC0r2bZhg0bWvbV7vti1lez/ObNmy37arV/q76anedt3LjRtK+VPSe0ylv11Sz/xRdfWPbVLL9161bTvpplV65cabkGm+VfeeUV23OmwPPfYOcplTlfNsvbrU1m59d2v18t2T6D7wJx+sVYjh49apw6dcro16+fsW3btpDu26VLl6AvxnLo0CGjbdu2xsaNG0Pa5yeffGIMGjTIKCkpMUpKSoy77rrLWLNmTdD7vf3220FfjGX9+vXGgAEDjOLiYqOgoMBISUkx/v3vf1vm//Of/xg9e/Y0Tpw4Uf7iJ4FP5A6UmZlpDB06NGi9hmEYn376qdGvXz/j5MmThs/nM5544glj9uzZlvkdO3YY/fr1M8rKyoz8/HyjZ8+expYtW0yzp3tTXFxsdO7c2di7d6/h8XiMu+++23j//fct86c98sgjFV6MJTBbUFBgJCUlGStXrrT9Ok/nv/32W6NLly7GiRMnDJ/PZ0yePNl47bXXgtZiGIbxr3/9y/RFAM7M79ixw+jcubNx/Phxo7S01Bg9erSxevVqy/yhQ4eMTp06GYcOHTIM48cnaM+aNcuylqNHjxqdOnUK6WvdtWuXkZSUZOTm5hqGYRivvPKK6c/n6XxeXp6RlJRkFBQUGCUlJcbw4cONd9991zAM82PIrq/Bjrnf/va3fk9yNstb9dYsa9fXYLUE9tUsb9dXs7xVX61qseqrWd6ur2Z5u75arXVWfQ22Ngb21Sy/cuVK076aZefNm2fZ12C1BPbVLD9nzhzLvlrVbtZXq1qs+mqWf/XVVy37apZftWqVZV/PdPr3UijrsNnvsMCemuVDXYdP50Ndh83qsVuHT+dDWYdPZ0NZgwNrCWUdPp0PdR0+nbc7Xq3OH6z6Gux848zemmW/+OILy75a5a36GqyWwL6a5Tdv3mzaV6tarPpqVYtVX63yVn01y2/ZssWyr2bneW+++aZpX4OdEwYer2b5N954w7KvVnmrvgar58y+Wu3b6lg1y8+ZM8f2eA08/w227tmdL5utfXb5wJ9hs/PrP/3pTyGdD5/JEW+v0LhxY6WlpSk1NVVlZWUaPHiwEhMTq2z/CxcuVElJid9LNA8dOlTDhg0zzSclJSkzM1MDBgxQZGSkevToob59+1ZJLV26dNG2bds0YMAA+Xw+DR8+XG3atLHMt2rVSmPGjNHw4cNVVlamjh07Bn0Y4f79+5WQkBBSPbfddpu++eYbDRo0SFFRUWrZsqXuuecey3yzZs3Uo0cP9evXT16vV3feeaduvvlm289Rp04dPfvss3rggQdUUlKipKQkv+conIvly5fryJEjev311/X6669Lkm6//XY9+OCDpvnrr79e99xzj4YOHarIyEjdcsstlbpkH0yzZs10zz33aNiwYfJ4POrRo4eSk5Mt85dddpmefvpp3XvvvSopKdGNN95o+/YWBw4cCLm3v/jFL/Tggw8qNTVVkZGRuvLKK/X0009b5hs2bKj7779fQ4YMkcfjUXJyslJSUiRZH0NWfa3sMWeW79Onj2lvCwoKTPdt1deqqOX0/s36apU36+sLL7xgmm3evLlpX632bdVXq7xVX63WukaNGpn2tbJro1n++PHjlsdsYHb8+PFq1KiRaV+ropYJEyaoYcOGpn01yw8YMEANGjSo0Nd69eqZ1pKZmWnaV7N9jxs3TvHx8aZ9Ncv369dPJSUlpn01wzpsvg5Xdg2Wzt86bHX+YNXXypxvmGW3b99u2Vez/C233GLZ18qe+5jlb731Vsu+mtVi1VerWqyOV6u8VV/N8jfffLNlX83O84YNG6ZrrrmmQl9dLlelzgnN9u31ei37apYfOXKk6tSpY9rXypyjWu3b7Xab9tQsP378eLVo0cLyeA08/w227lXmfLmyebPz6wceeEAdO3as1DrsMgzDCLlCAAAAAECN54jn6AEAAAAAfsKgBwAAAAAOw6AHAAAAAA7DoAcAAAAADsOgBwAAAAAOw6AHAEAVe/nll/XOO+/YZgoKCpSamlo9BQEAah3eXgEAgPPgwIEDSklJ0datW893KQAAB2LQAwDUGj6fT9OnT9e2bdt08uRJGYahP/7xj7r66qv16KOPat++fWrQoIHi4uJ03XXX6YEHHtDu3bs1bdo0HT9+XF6vVyNHjtTgwYNtP8/kyZN13XXX6e6771bLli11zz33aMOGDcrJySl/E9+RI0dqy5Ytuv7667VixQpFRkZW03cBAFAbuM93AQAAVJdt27YpJydHS5YsUUREhObPn68FCxYoJiZG1157rV577TXl5ORo0KBBuu666+TxeDRx4kTNnDlTzZs3V0FBgYYMGaJrr71WrVu3DulzlpaWqmHDhnrrrbe0fft2DRs2THfccYdmzJihlJQUrVq1KrxfNACgVmLQAwDUGm3atNEll1yit956S/v379fmzZt10UUX6YsvvtDKlSslSfHx8erVq5ckae/evdq3b58ee+yx8n0UFxfrm2++CXnQk6SuXbtKkpo3b67S0lKdOnWq6r4oAABMMOgBAGqNTz75RNOmTdNdd92lrl276pprrtG7774rt9utM5/JEBHx42uVeb1eXXzxxX5X3Y4cOaKLL764Up+3Tp06kiSXyyVJ4lkTAIBw41U3AQC1xoYNG9SlSxcNHz5cLVq00EcffSSv16ukpCQtX75cknTs2DF99NFHcrlcuvrqq1W3bt3yQe/w4cNKTk7W9u3bz7kWt9str9fL0AcACAsGPQBArTF06FB9/vnnSklJ0cCBA9W0aVMdOHBAjz76qPbs2aOUlBRNnDhRl19+uerWravo6Gj9+c9/1vLly5WSkqLRo0frwQcf1M0333zOtcTFxSkxMVF9+/bVsWPHquCrAwDgJ7zqJgCg1ktPT9dNN92kNm3aqLS0VMOHD9cDDzygpKSk810aAABnhefoAQBqvWuvvVbPPPOMfD6fysrK1KtXL9shb8+ePUpLSzO97eqrr9ZLL70UpkoBAAgNV/QAAAAAwGF4jh4AAAAAOAyDHgAAAAA4DIMeAAAAADgMgx4AAAAAOAyDHgAAAAA4DIMeAAAAADjM/wMsj6ezG/aiDAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 1080x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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WMOGDVNBQcEJzbNt2zbNmDFDkjRnzhz99a9/9Uc8j/Xr1+vRRx/165wAAPwa97ABAAylT58+2rhxoywWi9/mnDNnji6++GLddtttfpsTAIBAiAx2AAAADps0aZLcbrdycnI0atQovffee2publZjY6PGjh2r++67T1u2bNFTTz2ls88+W19++aW6du2qO+64Q8uXL9eXX36p5ORkPfDAA9qyZYsWLlyoN954wzP/2rVrVVJSotdee03SL1+6etNNN2nDhg2Kjo4+YiaHw6HZs2dr3759kqShQ4fqvvvuU1lZmdatW6fnnntO48aN8xz/ww8/6Pvvv9eWLVvU2tqqRYsW6bPPPlNLS4sGDx6s+++/X5GR/PELAGgfLokEABhGSUmJJKm4uFibN29Wfn6+ysrKVFpaqqVLl6qxsVHSL5c73nHHHVqzZo1OPfVULV26VC+88ILKyspUUlKi+vr6I84/atQoffPNN9q5c6ckaeXKlcrIyDhqWZOkFStWKD4+XqtXr5bNZtPXX3+t/fv3e/Z36tRJa9as0Zo1a1RcXKzu3bsrPz9f3bp102OPPaZ+/fqprKxM5eXl2rdvn1566SV/LRcAIAzwT3wAAEN6/vnntXHjRr3xxhv6/PPP5Xa71dTUJEmKj4/XZZddJkk677zzdNpppyk6OlpnnHGGunfvrh9++OGIc0ZHR2vChAlauXKlZs+erdWrV2v58uW/meO6667THXfcob179yopKUkzZ87Uaaed1ua4gwcPavr06UpPT9eNN94oSdq4caO2bdumVatWeY4BAOBYUNgAAIbT1NSkiRMnasSIEbrqqqs0fvx4vfPOOzp82/Wvz4gdyyWGEydOVGZmpq655hpdfPHFOvfcc3/z+ISEBK1fv141NTXavHmzJkyYoKKiIq9jWltbNXPmTF1yySW64447PNtdLpeefvppXXTRRZIkp9OpiIiIdmcFAIBLIgEAhtPY2Kgff/xR9913n4YNG6YtW7aoublZLpfrhOc+++yzdcUVV+ixxx7TLbfc4vP4JUuW6LnnntOIESM0d+5c9e7d23NJ5WELFizQoUOH9NBDD3ltv/baa/Xyyy/L7XarublZd911l1555ZUT/gwAgPBBYQMAGM4555yj66+/XqNHj9bo0aP197//Xb1799bXX3/tl/nHjRsnl8uloUOH+jx2ypQp+uSTT5SWlqbx48crPj7ec8mjJP3rX//Sa6+9pr179yozM1Pp6elKT0/Xtm3bNHfuXB04cEBWq1VWq1WXXHKJbr/9dr98BgBAeOCx/gCAsOJyubRgwQKdc845XpcvAgBgRNzDBgAIGz/++KNuuOEGDRw4UHPmzPFsnzRpkn766acjvsZms+nUU08NVEQAALxwhg0AAAAADIp72AAAAADAoChsAAAAAGBQFDYAAAAAMCgKGwAAAAAYFIUNAAAAAAyKwgYAAAAABvX/229oIdasMW0AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1080x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4oAAAEeCAYAAADM5euEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA/PUlEQVR4nO3dfVgVdf7/8Rdyp6V0c12gLbi2mUpJKmKZ5cLX+gImnlTWTGSFNNPKm7T9agqkWWuRud0YlW1braVrEqsiVmitN21huZ42XXaNtMQEBdE2j5jAAeb3hz9OjRwD7cA5cp6P6+K6nM985jPveTN4eDMzn/ExDMMQAAAAAAD/Xzt3BwAAAAAA8CwUigAAAAAAEwpFAAAAAIAJhSIAAAAAwIRCEQAAAABgQqEIAAAAADChUAQAL9SrVy/TV1RUlO69914dPHiwVfb/6aefqlevXjp58mSz+peUlOiDDz5o4ajca8uWLerVq9dZ1/fq1Utbtmxxyb6ef/550/c/PDxcUVFRuu+++/Svf/2rWWO4Mh4AgOehUAQAL7V48WJ99NFH+vDDD7Vy5Uq1a9dOU6dOlSe+XnfevHmyWq3uDqNNCQ8P10cffeQ4B7Kzs+Xr66tJkybpxIkT7g4PAOBmFIoA4KWCgoIUHByszp07Kzw8XDNmzFBRUZG+/PJLd4eGVuDr66vg4GAFBwcrJCRE3bt31/z58/Xdd9/p008/dXd4AAA3o1AEAEiSLrvsskZteXl5slgs6tOnj+Lj47V27VpJUk1NjRISEnTfffc5+r722mu6/vrrVVZWpk8//VQDBgzQmjVrNHjwYA0YMEAPP/ywqqqqnO77xIkTeuyxx/TrX/9affv21d13362vv/5akjR37lzt2LFDr732mm655Ran2x8/flwzZ85U//79FRMTozVr1ujaa69VSUmJpNO3ST777LO66aabdPvtt6uurk7FxcW67777dP3112vgwIHKyMhQZWWlJOe3xj7//PNKTEyUdPpW2F69emnDhg269dZbFRkZqRkzZui///2vo39FRYUeeOABRUZGavDgwUpPTzddqTtw4IDuuusu9e3bVyNGjNC+ffua/B7t3r1bFotF1113ne666y4dOnRIkvTKK6/of/7nf0xXg//xj3+oX79+zb69V5L8/PwkSf7+/pKk0tJS3X///erfv79uuukm/f73v5fdbm+03ffff69HHnlEgwcPVu/evRUTE6MXX3zRsX7v3r0aP368IiMjdeONNyo9PV3ff/+9JKm8vFz33nuvoqKiNGDAAM2YMUPHjh1rdswAgJZBoQgA0KlTp/Tyyy+rd+/e6tmzpyRp/fr1mjdvnpKSkrR+/XqNHz9eDz/8sLZu3aqAgAA9/vjj2rp1qz744AN9/fXXevbZZ5WRkaEuXbpIOl08vPrqq1q6dKleeuklFRQUaOHChU73P2PGDH366ad6+umnlZ2drcDAQN199906deqU0tPTFRkZqaSkJOXk5Djd/sEHH9TBgwf1xhtv6KmnntKyZctUV1dn6pOXl6fly5frySef1IkTJzRu3Dj5+/tr5cqVev7552W1WpWWlnZOeXv66af1yCOP6M0331RJSYkeeOABx7rp06fLMAytXr1aL730kr755hvNmjVLkmS32zV58mR16NBBf/3rXzV16lS98sorTe7vzTff1NSpU7VmzRoFBARowoQJqq+v1+23367y8nLT7bl5eXm69dZbdfHFFzfrWI4dO6ZFixbp8ssvV//+/VVTU6OJEyequrrakaPNmzcrKyur0baZmZn6/PPP9eKLLyo/P1/jx4/Xc889p8LCQknS7373O/3qV7/S+vXrtWzZMm3fvl1//OMfJUmPPPKI2rVrp5ycHK1YsUKlpaXKzMxsVswAgJbj5+4AAADu8cADD8jX11eGYaiqqkrt2rXTSy+9JB8fH0nSn//8Z40ZM0bjxo2TJF155ZXau3evli1bpv/5n/9R3759lZqaqscff1whISGKiYnRiBEjHOPX1dVp4cKF6t+/v6TTzxnOnDlT6enppji+/PJLFRQUKCcnR9ddd50kacmSJRoyZIjy8vI0ZswY+fv7q0OHDrr88ssbHcf+/fv10UcfKTc3V+Hh4ZKkjIwM3XPPPaZ+d955p3r06CFJWrFiherr67V48WK1b99e0uliZ8yYMdq/f3+zczhjxgz9+te/liQtWrRII0eO1FdffaWKigoVFRXpjTfeUEBAgOOYoqOj9eWXX+rw4cM6dOiQVq9erUsvvVRXX321iouL9Yc//OEn9zdp0iQNHTrUEW90dLS2b9+um2++Wddff73effddDRgwQHa7XRs3btSTTz551rH27NmjyMhISae/V9XV1erevbueffZZderUSVu3blVpaalWrVrlyPvChQudTnjUv39/3Xnnnerdu7cjzhdeeEH79u1TRESESktLdcstt+gXv/iFunbtqpdeesl01fLaa69VaGioAgIC9PTTT5/TVVAAQMugUAQAL5WRkaGBAwdKkiorK7Vt2zbHla1BgwZp3759uuuuu0zbREVF6Z133nEsz5w5U5s2bdKXX35putVQOv0MXL9+/RzL1113nex2u+OW0gb79u2Tv7+/IiIiHG0XXXSRrr32Wu3du7fJ4ygqKlJAQIBpxtCGAujHunbt6vj33r17dc011ziKxIb4/P399dVXX6lTp05N7leSBgwY4Ph3eHi4AgIC9OWXX+rYsWM6deqUI78/tn//fh08eFC/+MUvdOmll5r235Qf5/Pyyy9XaGio9u7dq5tvvlkjRozQH/7wB6Wnp+ujjz6Sj4+Pbr755rOOdfXVVzuuDrZr105BQUG65JJLHOv37dun0NBQU3HeUBSf6fbbb9eWLVuUm5ur4uJi7dmzR99//73q6+slSf/3f/+nRx99VKtWrdLgwYN122236X//938lnf6DxaxZs7Rp0yYNGjRIsbGxGj58eJO5AAC0LG49BQAvFRwcrG7duqlbt27q3bu37r//fg0cOFCrVq2SJFMR1cAwDMcv/5J05MgRHTt2TNXV1dq9e7epb7t27dSuXTvTttLpAvLHAgMDncZnGEazZmD18/NrVr8fH4+zY2tQX1/vuKr6Y7W1tU73/WOGYcjX11e1tbX6xS9+oXXr1pm+Nm3adNbireEK2085M3f19fWO7eLj43Xy5Ent2LFDGzZs0G233faTY/r7+zu+/127djUVic2Np0FaWpoWLlyo9u3ba+TIkVq9erWCgoIc65OSkrRlyxZNmzZNJ06c0MyZM5WRkSFJuvXWW7V161bNmzdPvr6+euSRRzR58uRm7xsA0DIoFAEADvX19Y5C8KqrrtLnn39uWv/Pf/5TV111laTTRVF6eroGDx6syZMna/78+abJWux2u2kG1d27dyswMFC/+tWvTGN2795ddrvd8TybdPqZyS+++KJRX2d69Oghu92uoqIiR1tT7wLs3r27vvjiC9PkOoWFhbLb7brqqqscRVLD5DaSHBPj/Ni///1vx7//85//yG63Kzw8XN27d9eRI0d08cUXO4oxf39/ZWZm6ttvv1WvXr1UWlqqo0ePmrZvyo+P8ciRIzp8+LCuvvpqSVLHjh01ZMgQffDBB/r73/8ui8XS5Hg/5corr9ShQ4f03XffOdrWrVun0aNHm/pVVlYqNzdXTz75pB588EENGzZM/v7+OnHihAzDUGVlpR599FH5+Pho/Pjx+uMf/6iHH35YeXl5MgxDTz75pI4cOaI77rhDS5cuVVZWlj7++GMmtAEAN6NQBAAvZbPZVFFRoYqKCh06dEjLly/XJ598ooSEBEnS5MmTlZ2drb/85S8qLi7WqlWrlJOTo5SUFEnSqlWrVFhYqIyMDN17770KDAxs9Ezcww8/rH//+9/69NNPlZmZqTvuuEMXXXSRqc+VV16puLg4paWlaefOnfryyy/10EMPydfX1xHLxRdfrAMHDqi8vLzRcXTr1k1DhgzRww8/rH/961/67LPP9Nhjj0mS0yuDkmSxWBQYGKg5c+boyy+/1M6dO5Wenq6bbrpJV199tXr06KH27dvr2Wef1cGDB5WTk6OtW7c2GufJJ5/Uzp07tXv3bmVkZGjIkCH65S9/qZtvvlk9evTQrFmzVFhYqC+++EKzZ8/WwYMHFRoaqkGDBumqq67SQw89pKKiIm3bts0xuctPycrK0pYtW1RUVKSHHnpI1157ren21hEjRujtt99Wp06dHM+Gnq/BgwerW7dumjt3riNHzz//vGJiYkz9AgMD1aFDB73//vs6ePCgrFarYyKfmpoadezYUTt27NBjjz2mffv2ad++ffrggw903XXXycfHR1999ZUeffRR/ec//9GBAwf0zjvvKDQ01OksvIAzvXr1ksVi0YgRIxxfZz4LDeA8GAAAr9OzZ0/TV0REhHH77bcbb7/9tqlfdna2ERsba/Tu3dsYNmyYsXbtWsMwDOPQoUNGZGSk8eqrrzr6fvjhh0avXr2Mjz/+2Pjkk0+Mnj17Gq+//roxcOBA44YbbjAyMzONmpoawzAMx/rKykrDMAzDZrMZ8+bNMwYMGGD069fPuOeee4yvv/7aMfbWrVsd49TV1TU6nmPHjhlTp041+vTpY/z61782Xn75ZaNnz55GeXm543g3b95s2mbv3r3GhAkTjOuuu84YOHCgMX/+fOPEiROO9Rs2bDBuueUW47rrrjOmTJlivPbaa8aoUaMMwzCMgwcPGj179jReeuklIzo62ujfv78xd+5c0/aHDx82pk2bZkRGRhpRUVHG/fffb5SWljrWl5WVGZMnTzb69u1rxMXFGX/605+Mnj17/uT37PXXXzfi4uKM6667zpg8ebJRVlZm6mO3240bbrjBePrpp886jmEYxtKlSx3H8lMOHDhgTJo0yejTp49x8803G0899ZRht9sd8TTkdPPmzUZ8fLxx3XXXGbfeequxdOlS45577jHS09MNwzCMr7/+2pg4caIRFRVl9OvXz5g6daoj9iNHjhjTp083brjhBqNPnz5GamqqsXfv3iZjAxr07NnTOHbsmLvDANocH8NoxoMdAACcg08//VQpKSn67LPPmv16hvN16tQpffzxx4qOjnbMMLp7926NGzdOn3/+eaPnCF2hpKREt956q/Ly8hyvE/EEx48f1+DBg7Vu3Tp1797d3eEAraJXr17avn2701mRc3JytHr1atntdh0/flz33HOPxo0bpzVr1ignJ0enTp1Sx44d9eabb+rtt9/WqlWrVF9fr0svvVQPP/wwP0fwasx6CgC4oAUGBiojI0MjR45UcnKybDabnnzyScXHx7dIkeiJTp06pW3btumdd95R//79+eUWXic1NdU0edZrr72m9u3b6+2339Yf//hHXXbZZfr88881YcIExyt/9u3bp82bNztuj163bp1WrlypDh066KOPPtK0adP03nvvueuQALfzjk9QAECb1fD+xyeffFJvvfWW2rdvr7i4OM2ZM8fdobUaX19fzZ8/X5dddpleeukld4cDtLrly5c7vaK4bNkybdu2TcXFxfriiy/0/fffO9b16tVLHTt2lCRt3bpVBw4c0NixYx3rbTabvvvuO9NrbABvQqEIAHC5gQMHmmbobGmRkZF66623Wm1/YWFhrXp8TQkICNCOHTvcHQbgUcrKynTnnXdqzJgxioqK0tChQ7VlyxbH+h9PrFVfX68RI0Zo9uzZjuUjR440em0M4E2Y9RQAAABtTmFhoS6//HLdf//9Gjx4sKNIrKura9R38ODBeuedd3TkyBFJp2d1Tk1NbdV4AU/DFUUAAAC0OTfffLNycnI0dOhQ+fj46IYbbtDll1+uAwcONOo7ePBg3XPPPZo4caJ8fHzUsWNHZWVlnfUVO4A3YNZTAAAAAIAJt54CAAAAAEwoFAEAAAAAJhSKAAAAAAATj5nMpqqqSoWFhQoODpavr6+7wwEAeJC6ujpVVFQoIiJC7du3d3c4Fww+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\n",
      "text/plain": [
       "<Figure size 1080x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 分析幸存下来的人群分布\n",
    "# 年龄数据的分布情况\n",
    "# 简单的看分布情况，可以用直方图和箱型图来表示。\n",
    "\n",
    "#绘制直方图\n",
    "plt.subplot(122)\n",
    "titanic.boxplot(column = 'Age',showfliers = False)\n",
    "#绘制箱型图\n",
    "titanic_age['Age'].describe()\n",
    "\n",
    "\n",
    "\n",
    "# 老人和孩子\n",
    "plt.figure(figsize = (15,4))\n",
    "titanic_age['age_int'] = titanic_age['Age'].astype(int)\n",
    "average_age = titanic_age[['age_int','Survived']].groupby(['age_int'],as_index = False).mean()\n",
    "sns.barplot(x = 'age_int',y = 'Survived',data = average_age,palette = 'BuPu')\n",
    "\n",
    "\n",
    "# 4结合 SibSp、Parch字段，研究亲人多少与存活的关系\n",
    "# 有无兄弟姐妹/父母子女和存活与否的关系\n",
    "# 根据题目要求，分四种情况（有无兄弟，有无父母）计算存活率。\n",
    "# 先进行数据筛选。\n",
    "plt.figure(figsize = (15,4))\n",
    "titanic_age['age_int'] = titanic_age['Age'].astype(int)\n",
    "average_age = titanic_age[['age_int','Survived']].groupby(['age_int'],as_index = False).mean()\n",
    "sns.barplot(x = 'age_int',y = 'Survived',data = average_age,palette = 'BuPu')\n",
    "sib_data = titanic[titanic['SibSp'] != 0]\n",
    "nosib_data = titanic[titanic['SibSp'] == 0]\n",
    "par_data = titanic[titanic['Parch'] != 0]\n",
    "nopar_data = titanic[titanic['Parch'] == 0]\n",
    "\n",
    "# 亲戚多少与存活与否的关系\n",
    "# Parch和SibSp两个字段相加其实就是亲戚个数，直接分组求平均值看存活率。\n",
    "titanic['family_size'] = titanic['Parch'] + titanic['SibSp']\n",
    "titanic[['family_size','Survived']].groupby('family_size').mean().plot.bar(figsize = (15,4))\n",
    "\n",
    "\n",
    "#查看亲戚个数与存活率\n",
    "# 5 结合票的费用情况，研究票价和存活与否的关系\n",
    "# 这里的思路其实也可以和之前的一样，就是分票价查看存活率。但是我们浏览票价发现票价并不是统一的几个值，这里可以先作图看看票价分布。\n",
    "fig,ax = plt.subplots(1,2,figsize = (15,4))\n",
    "titanic['Fare'].hist(bins = 70,ax = ax[0])\n",
    "titanic.boxplot(column = 'Fare',by = 'Pclass', showfliers=False,ax = ax[1])\n",
    "#查看票价分布\n",
    "# 那么可以换一个思路了，反过来通过查看生还和死亡人群的票价分布，了解情况。\n",
    "fare_die = titanic['Fare'][titanic['Survived'] == 0]\n",
    "fare_sur = titanic['Fare'][titanic['Survived'] == 1]\n",
    "\n",
    "average_fare = pd.DataFrame([fare_die.mean(),fare_sur.mean()])\n",
    "std_fare = pd.DataFrame([fare_die.std(),fare_sur.std()])\n",
    "average_fare.plot(yerr = std_fare,kind = 'bar',legend = False,figsize = (12,6),grid = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "d08d63e9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 1]\n",
      "[0 1 2]\n",
      "count    891.000000\n",
      "mean       0.361392\n",
      "std        0.635673\n",
      "min        0.000000\n",
      "25%        0.000000\n",
      "50%        0.000000\n",
      "75%        1.000000\n",
      "max        2.000000\n",
      "Name: Embarked, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print(titanic[\"Sex\"].unique())\n",
    "# 男性用0表示，女性用1表示\n",
    "titanic.loc[titanic[\"Sex\"] == \"male\", \"Sex\"] = 0\n",
    "titanic.loc[titanic[\"Sex\"] == \"female\", \"Sex\"] = 1\n",
    "print(titanic[\"Embarked\"].unique())\n",
    "# 将Embarked字段缺失值填充为数量最多的S\n",
    "titanic[\"Embarked\"] = titanic[\"Embarked\"].fillna('S')\n",
    "# 把S、C、Q分别用数字0、1、2表示\n",
    "titanic.loc[titanic[\"Embarked\"] == \"S\", \"Embarked\"] = 0\n",
    "titanic.loc[titanic[\"Embarked\"] == \"C\", \"Embarked\"] = 1\n",
    "titanic.loc[titanic[\"Embarked\"] == \"Q\", \"Embarked\"] = 2\n",
    "print(titanic['Embarked'].describe())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "id": "50400c8e",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import KFold  # cross_validation 已经被model_selection 代替\n",
    "# 七个特征值\n",
    "predictors = [\"Pclass\", \"Sex\", \"Age\", \"SibSp\", \"Parch\", \"Fare\", \"Embarked\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "6e2b9e42",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7833894500561167\n"
     ]
    }
   ],
   "source": [
    "#导入线性回归类\n",
    "from sklearn.linear_model import LinearRegression# 导入线性回归类\n",
    "from sklearn.model_selection import KFold   #K折交叉验证（由from sklearn.cross_validation import KFold改为from sklearn.model_selection import KFold）\n",
    "#我们将用来预测目标的列输入的值\n",
    "predictors = [\"Pclass\", \"Sex\", \"Age\", \"SibSp\", \"Parch\", \"Fare\", \"Embarked\"]\n",
    "# 初始化我们的算法类\n",
    "alg = LinearRegression()#导入线性回归\n",
    "# 为泰坦尼克号数据集生成交叉验证折叠。 它返回对应于训练和测试的行索引。\n",
    "# 我们设置 random_state 以确保每次运行时都能获得相同的拆分。\n",
    "kf = KFold(3,shuffle=False)\n",
    "#（由kf = KFold(titanic.shape[0], n_folds=3, random_state=1)改为kf =KFold(3,shuffle=False,random_state=1)）\n",
    "predictions = []\n",
    "for train, test in kf.split(titanic):#（由for train, test in kf:改为for train, test in kf.split(titanic):）\n",
    "    # 我们使用的预测器训练算法。 请注意我们如何只取训练集中的行。\n",
    "    train_predictors = (titanic[predictors].iloc[train,:])#取出数据集中预测特征值并且分出训练集\n",
    "    # 我们用来训练算法的目标。\n",
    "    train_target = titanic[\"Survived\"].iloc[train]\n",
    "    # 使用预测器和目标训练算法。\n",
    "    alg.fit(train_predictors, train_target)#alg = LinearRegression()将该算法应用在该数据上\n",
    "    # 我们现在可以对测试折叠进行预测\n",
    "    test_predictions = alg.predict(titanic[predictors].iloc[test,:])\n",
    "    predictions.append(test_predictions)\n",
    "    import numpy as np\n",
    "# 预测在三个独立的 numpy 数组中。 将它们连接成一个。\n",
    "# 我们在轴 0 上连接它们，因为它们只有一个轴.\n",
    "predictions = np.concatenate(predictions, axis=0)\n",
    "predictions[predictions > .5] = 1\n",
    "predictions[predictions <=.5] = 0\n",
    "accuracy=len(predictions[predictions==titanic['Survived']])/(len(predictions))\n",
    "#（由accuracy = sum(predictions[predictions == titanic[\"Survived\"]]) / len(predictions)改为accuracy=len(predictions[predictions==titanic['Survived']])/(len(predictions) )）\n",
    "print(accuracy)#结果：0.7833894500561167准确率\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "6f582ed9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7878787878787877\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import _validation #逻辑回归（由from sklearn import cross_validation改为from sklearn.model_selection import _validation）\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "alg = LogisticRegression(random_state=1,solver='liblinear')#（加了solver='liblinear'）\n",
    "scores = _validation.cross_val_score(alg, titanic[predictors], titanic[\"Survived\"], cv=3)\n",
    "#（由scores = cross_validation.cross_val_score(alg, titanic[predictors], titanic[\"Survived\"], cv=3)改为scores = _validation.cross_val_score(alg, titanic[predictors], titanic[\"Survived\"], cv=3)）\n",
    "print(scores.mean())   #0.7878787878787877\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "a5847f9d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7856341189674523\n",
      "0.8148148148148148\n"
     ]
    }
   ],
   "source": [
    "titanic_test = pd.read_csv(\"C:/Users/yancong/Desktop/泰坦尼克号/test.csv\")  #（测试集）\n",
    "titanic_test[\"Age\"] = titanic_test[\"Age\"].fillna(titanic[\"Age\"].median())\n",
    "titanic_test[\"Fare\"] = titanic_test[\"Fare\"].fillna(titanic_test[\"Fare\"].median())\n",
    "titanic_test.loc[titanic_test[\"Sex\"] == \"male\", \"Sex\"] = 0 \n",
    "titanic_test.loc[titanic_test[\"Sex\"] == \"female\", \"Sex\"] = 1\n",
    "titanic_test[\"Embarked\"] = titanic_test[\"Embarked\"].fillna(\"S\")\n",
    "\n",
    "titanic_test.loc[titanic_test[\"Embarked\"] == \"S\", \"Embarked\"] = 0\n",
    "titanic_test.loc[titanic_test[\"Embarked\"] == \"C\", \"Embarked\"] = 1\n",
    "titanic_test.loc[titanic_test[\"Embarked\"] == \"Q\", \"Embarked\"] = 2\n",
    "\n",
    "\n",
    "#随机森林\n",
    "from sklearn.model_selection import _validation\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "predictors = [\"Pclass\", \"Sex\", \"Age\", \"SibSp\", \"Parch\", \"Fare\", \"Embarked\"]\n",
    "alg = RandomForestClassifier(random_state=1, n_estimators=10, min_samples_split=2, min_samples_leaf=1)\n",
    "kf = KFold(3,shuffle=False)\n",
    "scores = _validation.cross_val_score(alg, titanic[predictors], titanic[\"Survived\"], cv=kf)\n",
    "print(scores.mean())  \n",
    "#随机森林的参数调节\n",
    "alg = RandomForestClassifier(random_state=1, n_estimators=100, min_samples_split=4, min_samples_leaf=2)\n",
    "kf = KFold(3,shuffle=False)\n",
    "scores = _validation.cross_val_score(alg, titanic[predictors], titanic[\"Survived\"], cv=kf)\n",
    "\n",
    "print(scores.mean()) \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "a457a118",
   "metadata": {},
   "outputs": [],
   "source": [
    "#（1）FamilySize = SibSp + ParCh\n",
    "titanic[\"FamilySize\"] = titanic[\"SibSp\"] + titanic[\"Parch\" ] #家庭成员量\n",
    "#（2）NameLength = len (Name) \n",
    "titanic[\"NameLength\"] = titanic[\"Name\"].apply(lambda x: len(x))  #名字长度\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "c5abec30",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mr          517\n",
      "Miss        182\n",
      "Mrs         125\n",
      "Master       40\n",
      "Dr            7\n",
      "Rev           6\n",
      "Col           2\n",
      "Major         2\n",
      "Mlle          2\n",
      "Lady          1\n",
      "Sir           1\n",
      "Mme           1\n",
      "Don           1\n",
      "Jonkheer      1\n",
      "Ms            1\n",
      "Capt          1\n",
      "Countess      1\n",
      "Name: Name, dtype: int64\n",
      "1     517\n",
      "2     183\n",
      "3     125\n",
      "4      40\n",
      "5       7\n",
      "6       6\n",
      "7       5\n",
      "8       3\n",
      "10      3\n",
      "9       2\n",
      "Name: Name, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "import re\n",
    "def get_title(name):\n",
    "   # 使用正则表达式搜索标题。 标题总是由大写和小写字母组成，并以句点结束。\n",
    "    title_search = re.search(' ([A-Za-z]+)\\.', name)\n",
    "   # 如果名字前缀存在，则提取并返回。\n",
    "    if title_search:\n",
    "        return title_search.group(1)\n",
    "    return \"\"\n",
    "titles = titanic[\"Name\"].apply(get_title)\n",
    "print(pd.value_counts(titles))\n",
    "\n",
    "title_mapping = {\"Mr\": 1, \"Miss\": 2, \"Mrs\": 3, \"Master\": 4, \"Dr\": 5, \"Rev\": 6, \"Major\": 7, \"Col\": 7, \"Mlle\": 8, \"Mme\": 8, \"Don\": 9, \"Lady\": 10, \"Countess\": 10, \"Jonkheer\": 10, \"Sir\": 9, \"Capt\": 7, \"Ms\": 2}\n",
    "for k,v in title_mapping.items():\n",
    "    titles[titles == k] = v\n",
    "print(pd.value_counts(titles))\n",
    "titanic[\"Title\"] = titles\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "87d54338",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8215488215488216\n"
     ]
    }
   ],
   "source": [
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "import numpy as np\n",
    "#我们想要集成的算法。\n",
    "#我们正在为逻辑回归使用更线性的预测器，以及梯度提升分类器的所有内容。\n",
    "algorithms = [\n",
    "    [GradientBoostingClassifier(random_state=1, n_estimators=25, max_depth=3), [\"Pclass\", \"Sex\", \"Age\", \"Fare\", \"Embarked\", \"FamilySize\", \"Title\",]],\n",
    "    [LogisticRegression(random_state=1,solver='liblinear'), [\"Pclass\", \"Sex\", \"Fare\", \"FamilySize\", \"Title\", \"Age\", \"Embarked\"]]\n",
    "]  #（GradientBoostingClassifier和LogisticRegression组合利用）\n",
    "#初始化交叉验证折叠\n",
    "kf = KFold(3,shuffle=False)#\n",
    "predictions = []\n",
    "for train, test in kf.split(titanic):#（由for train, test in kf:改为for train, test in kf.split(titanic):）\n",
    "    train_target = titanic[\"Survived\"].iloc[train]\n",
    "    full_test_predictions = []\n",
    "    # 对每个折叠的每个算法进行预测\n",
    "    for alg, predictors in algorithms:\n",
    "      # 在训练数据上拟合算法。\n",
    "        alg.fit(titanic[predictors].iloc[train,:], train_target)\n",
    "       # 在测试折叠上选择和预测。 \n",
    "        # T.astype(float) 是将数据帧转换为所有浮点数并避免 sklearn 错误所必需的。\n",
    "        test_predictions = alg.predict_proba(titanic[predictors].iloc[test,:].astype(float))[:,1]\n",
    "        full_test_predictions.append(test_predictions)\n",
    "    # 使用简单的集成方案——只需平均预测即可获得最终分类。\n",
    "    test_predictions = (full_test_predictions[0] + full_test_predictions[1]) / 2\n",
    "    # 任何超过 .5 的值都被认为是 1 预测，低于 .5 是 0 预测。\n",
    "    test_predictions[test_predictions <= .5] = 0\n",
    "    test_predictions[test_predictions > .5] = 1\n",
    "    predictions.append(test_predictions)\n",
    "#P将所有预测放在一个数组中。\n",
    "predictions = np.concatenate(predictions, axis=0)\n",
    "#C#通过与训练数据进行比较来计算准确率。\n",
    "accuracy = len(predictions[predictions == titanic[\"Survived\"]]) / len(predictions)\n",
    "#\n",
    "print(accuracy)  #结果：0.8215488215488216\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "1ff31414",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#  随机森林特征重要性分析\n",
    "import numpy as np\n",
    "from sklearn.feature_selection import SelectKBest, f_classif\n",
    "import matplotlib.pyplot as plt\n",
    "predictors = [\"Pclass\", \"Sex\", \"Age\", \"SibSp\", \"Parch\", \"Fare\", \"Embarked\", \"FamilySize\", \"Title\", \"NameLength\"]\n",
    "#进行特征选择\n",
    "selector = SelectKBest(f_classif, k=5)\n",
    "selector.fit(titanic[predictors], titanic[\"Survived\"])\n",
    "#获取每个特征的原始p值，并将p值转换为分数\n",
    "scores = -np.log10(selector.pvalues_)\n",
    "#绘制分数。 看看“Pclass”、“Sex”、“Title”和“Fare”如何是最好的？\n",
    "plt.bar(range(len(predictors)), scores)\n",
    "plt.xticks(range(len(predictors)), predictors, rotation='vertical')\n",
    "plt.show()\n",
    "#只选择四个最好的功能。\n",
    "predictors = [\"Pclass\", \"Sex\", \"Fare\",\"Title\"]\n",
    "alg = RandomForestClassifier(random_state=1, n_estimators=50, min_samples_split=8, min_samples_leaf=4)\n",
    "#结果如下图：\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "07cf4a1d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8170594837261503\n",
      "[0. 0. 1. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0. 0. 1. 0. 0. 1. 0. 1.\n",
      " 1. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 1.\n",
      " 0. 0. 1. 0. 0. 0. 0. 1. 0. 1. 0. 1. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.\n",
      " 0. 0. 0. 1. 1. 0. 0. 0. 0. 0. 0. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 1.\n",
      " 0. 1. 0. 0. 0. 0. 0. 1. 0. 0. 1. 0. 1. 0. 0. 0. 1. 0. 1. 0. 1. 0. 0. 0.\n",
      " 0. 0. 1. 1. 0. 0. 1. 0. 0. 0. 0. 0. 1. 1. 0. 1. 1. 0. 0. 0. 0. 0. 0. 0.\n",
      " 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 1. 0. 0. 0. 1. 1. 0. 0. 0. 1. 0. 0.\n",
      " 0. 1. 0. 1. 0. 1. 0. 0. 0. 0. 1. 0. 1. 0. 0. 1. 0. 1. 1. 1. 0. 0. 0. 0.\n",
      " 1. 0. 1. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0. 1. 0. 1. 1. 0. 0. 0. 0. 1. 0. 1.\n",
      " 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 1. 0. 0. 1. 0. 0. 0. 1. 0. 1. 1. 1. 0. 0.\n",
      " 0. 1. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 1. 0. 0. 1. 1. 1. 1. 1. 0.\n",
      " 1. 0. 0. 0. 1. 0. 0. 1. 1. 0. 0. 0. 0. 1. 0. 0. 1. 1. 0. 0. 0. 1. 1. 0.\n",
      " 1. 0. 0. 0. 0. 1. 1. 0. 0.]\n"
     ]
    }
   ],
   "source": [
    "# 集成模型\n",
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "import numpy as np\n",
    "#我们想要集成的算法。\n",
    "#我们正在为逻辑回归使用更线性的预测器，以及梯度提升分类器的所有内容。\n",
    "algorithms = [\n",
    "    [GradientBoostingClassifier(random_state=1, n_estimators=25, max_depth=3), [\"Pclass\", \"Sex\", \"Age\", \"Fare\", \"Embarked\", \"FamilySize\", \"Title\",]],\n",
    "    [LogisticRegression(random_state=1,solver='liblinear'), [\"Pclass\", \"Sex\", \"Fare\", \"FamilySize\", \"Age\", \"Embarked\"]]\n",
    "]  #（GradientBoostingClassifier和LogisticRegression组合利用）\n",
    "#nitialize the cross validation folds\n",
    "kf = KFold(3,shuffle=False)#（由kf = cross_validation.KFold(titanic.shape[0], n_folds=3, random_state=1)改为kf = KFold(3,shuffle=False,random_state=1)）\n",
    "predictions = []\n",
    "for train, test in kf.split(titanic):#（由for train, test in kf:改为for train, test in kf.split(titanic):）\n",
    "    train_target = titanic[\"Survived\"].iloc[train]\n",
    "    full_test_predictions = []\n",
    "    # 对每个折叠的每个算法进行预测\n",
    "    for alg, predictors in algorithms:\n",
    "       # 在训练数据上拟合算法。\n",
    "        alg.fit(titanic[predictors].iloc[train,:], train_target)\n",
    "        # 在测试折叠上选择和预测。\n",
    "        # .astype(float) 是将数据帧转换为所有浮点数并避免 sklearn 错误所必需的。\n",
    "        test_predictions = alg.predict_proba(titanic[predictors].iloc[test,:].astype(float))[:,1]\n",
    "        full_test_predictions.append(test_predictions)\n",
    "   # 使用简单的集成方案——只需平均预测即可获得最终分类。\n",
    "    test_predictions = (full_test_predictions[0] + full_test_predictions[1]) / 2\n",
    "    # 任何超过 .5 的值都被认为是 1 预测，低于 .5 是 0 预测。\n",
    "    test_predictions[test_predictions <= .5] = 0\n",
    "    test_predictions[test_predictions > .5] = 1\n",
    "    predictions.append()\n",
    "#将所有预测放在一个数组中。\n",
    "predictions = np.concatenate(predictions, axis=0)\n",
    "#通过与训练数据进行比较来计算准确率。\n",
    "accuracy = len(predictions[predictions == titanic[\"Survived\"]]) / len(predictions)\n",
    "#（由accuracy = sum(predictions[predictions == titanic[\"Survived\"]]) / len(predictions)改为accuracy=len(predictions[predictions==titanic['Survived']])/(len(predictions))）\n",
    "print(accuracy)  #结果：0.8215488215488216\n",
    "print(test_predictions)\n",
    "output = pd.DataFrame({'Survived': predictions})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a824be24",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fac34fd1",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
